#ifndef _TIMER_CAP_H_
#define _TIMER_CAP_H_

#include "asm/clock.h"
#include "asm/bd19.h"
#include "asm/gpio.h"
#include "asm/irq.h"

/**
 * @brief Timer输入捕获中断回调函数类型
 * @param edge 触发边沿：0=上升沿，1=下降沿
 * @param cnt 计数值，用于计算时间间隔
 */
typedef void (*timer_cap_callback_t)(u8 edge, u32 cnt);

/**
 * @brief Timer输入捕获初始化
 * @param JL_TIMERx Timer外设：JL_TIMER0/1/2/3
 * @param cap_io 捕获GPIO引脚
 * @param edge 触发边沿：0=上升沿 1=下降沿 2=双沿(上升开始) 3=双沿(下降开始)
 * @param clk_div 时钟分频：CLK_DIV_4bit枚举值
 * @param cbfun 中断回调函数
 */
void timer_cap_init(JL_TIMER_TypeDef *JL_TIMERx, u32 cap_io, u8 edge, CLK_DIV_4bit clk_div, timer_cap_callback_t cbfun);

/**
 * @brief 关闭Timer输入捕获
 * @param JL_TIMERx Timer外设
 */
void close_timer_cap(JL_TIMER_TypeDef *JL_TIMERx);

/**
 * @brief Timer捕获测试函数
 */
void timer_cap_test(void);

/**
 * @brief Timer捕获中断服务程序（内部使用）
 */
void timer_cap_isr(void);

/**
 * @brief 计数值转微秒时间
 * @param cnt 计数值
 * @param div_val 实际分频倍数
 */
#define TIMER_CAP_CNT_TO_US(cnt, div_val)    ((cnt) * (div_val) / 24)

#endif /* _TIMER_CAP_H_ */